/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package controle;

import dao.PessoaDao;
import dominio.torcedor.socio.Associado;
import dominio.atendente.Atendente;
import dominio.pessoa.Endereco;
import dominio.pessoa.Pessoa;
import java.io.File;
import java.util.Calendar;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import util.AppUtil;
import util.Controlador;
import util.Resposta;

/**
 *
 * @author devair
 */
public class UsuarioCt extends Controlador {

    private final PessoaDao dao;

    public UsuarioCt(HttpServletRequest request, HttpServletResponse response, ServletContext contexto) {
        super(request, response, contexto);
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("SocioFiqueirensePU");

        dao = new PessoaDao(emf);

    }

    public void cadastro() {

        this.resposta.definirResposta("WEB-INF/visao/socio/cadastro.jsp", Resposta.TipoResposta.encaminhamento);
    }

    public void confirmar() {
        Pessoa pessoa;
        Endereco endereco;

        boolean edicao = false;
        if (this.getParameterValue("id") != null) {
            //edicao
            edicao = true;
            pessoa = dao.findPessoa(Long.parseLong(this.getParameterValue("id")));
            endereco = pessoa.getEndereco();

        } else {
            //novo
            pessoa = new Associado();
            endereco = new Endereco();
        }

        pessoa.setEmail(this.getParameterValue("email").toLowerCase());
        pessoa.setSenha(this.getParameterValue("senha"));
        pessoa.setNome(this.getParameterValue("nome").toUpperCase());
        pessoa.setEstadoCivil(this.getParameterValue("estadocivil").toUpperCase());
        pessoa.setCpf(this.getParameterValue("cpf").toUpperCase());
        pessoa.setIdentidade(Integer.parseInt(this.getParameterValue("identidade")));
        pessoa.setSexo(this.getParameterValue("sexo").toUpperCase());
        pessoa.setTelefone(this.getParameterValue("telefone"));

        Calendar dataNascimento = AppUtil.dataSimples(this.getParameterValue("nascimento"));
        pessoa.setNascimento(dataNascimento);

        endereco.setEndereco(this.getParameterValue("endereco").toUpperCase());
        endereco.setBairro(this.getParameterValue("bairro").toUpperCase());
        endereco.setComplemento(this.getParameterValue("complemento").toUpperCase());
        endereco.setCep(this.getParameterValue("cep").toUpperCase());
        endereco.setEstado(this.getParameterValue("estado").toUpperCase());
        endereco.setNumero(Integer.parseInt(this.getParameterValue("numero").toUpperCase()));

        if (pessoa.getNome().length() < 3) {
            this.resposta.adicionarErro("nome", "Nome deve conter no mínimo 3 caracteres.");
        }

        if (pessoa.getEmail().equals("")) {
            this.resposta.adicionarErro("email", "Email deve ser informado.");
        }
        
        if (this.getParameterValue("nascimento") == null) {
            this.resposta.adicionarErro("nascimento", "Necessario informar a data de nascimento.");
        }

        FileItem fi = this.getUploadedFile("foto");
        if (fi != null && fi.getSize() > 0) {
            String path = this.contexto.getRealPath(this.contexto.getInitParameter("foto-upload")) + "/";
            try {
                File file;
                String fileName = fi.getName();
                String relativeFileName;
                if (fileName.lastIndexOf("\\") >= 0) {
                    file = new File(path + fileName.substring(fileName.lastIndexOf("\\")));
                    relativeFileName = this.contexto.getInitParameter("foto-upload") + "/" + fileName.substring(fileName.lastIndexOf("\\"));
                } else {
                    file = new File(path + fileName.substring(fileName.lastIndexOf("\\") + 1));
                    relativeFileName = this.contexto.getInitParameter("foto-upload") + "/" + fileName.substring(fileName.lastIndexOf("\\") + 1);
                }
                fi.write(file);
                //pessoa.setCaminhoFoto(relativeFileName);
            } catch (Exception e) {
                this.resposta.adicionarErro("foto", e.getMessage());
            }
        }

        if (edicao) {
            try {
                if (this.resposta.existeErro()) {
                    throw new Exception("Corrigir os erros");
                }
                dao.edit(pessoa);
                //this.resposta.definirResposta("listar", Resposta.TipoResposta.redirecionamento);
            } catch (Exception ex) {

                this.resposta.adicionarErro("geral", "Erro: " + ex.getMessage());
                this.resposta.adicionarAtributo("pessoa", pessoa, Resposta.EscopoAtributo.requisicao);
                this.resposta.adicionarAtributo("id", this.getParameterValue("id"), Resposta.EscopoAtributo.requisicao);
                //this.resposta.adicionarAtributo("grupos", pessoa.getGrupo(), Resposta.EscopoAtributo.requisicao);
                //this.resposta.adicionarAtributo("departamentos", pessoa.getDepartamento(), Resposta.EscopoAtributo.requisicao);
                this.resposta.definirResposta("WEB-INF/visao/socio/cadastro.jsp", Resposta.TipoResposta.encaminhamento);

            }
        } else {
            try {
                if (this.resposta.existeErro()) {
                    throw new Exception("Corrigir os erros");
                }
                dao.create(pessoa);
                //this.resposta.definirResposta("listar", Resposta.TipoResposta.redirecionamento);
            } catch (Exception ex) {
                this.resposta.adicionarErro("geral", "Erro: " + ex.getMessage());
                //this.resposta.adicionarAtributo("usuario", usuario, Resposta.EscopoAtributo.requisicao);
                //this.resposta.adicionarAtributo("grupos", usuario.getGrupo(), Resposta.EscopoAtributo.requisicao);                
                this.resposta.definirResposta("WEB-INF/visao/socio/cadastro.jsp", Resposta.TipoResposta.encaminhamento);

            }
        }

    }

    public void autenticar() {
        Object pessoa;

        String email = this.getParameterValue("email");

        String senha = this.getParameterValue("senha");
        pessoa = dao.login(email, senha);

        if (pessoa != null) {
            this.resposta.adicionarAtributo("pessoa", pessoa, Resposta.EscopoAtributo.sessao);

            if (pessoa instanceof Atendente) {
                this.resposta.definirResposta("WEB-INF/visao/atendente/home.jsp", Resposta.TipoResposta.redirecionamento);
            } else {
                this.resposta.definirResposta("WEB-INF/visao/socio/home.jsp", Resposta.TipoResposta.encaminhamento);
            }

        } else {
            this.resposta.definirResposta("WEB-INF/visao/erro/naoautorizado.html", Resposta.TipoResposta.encaminhamento);
        }
    }
}
